EC2にOSSのGrafanaをインストールしてRDSと接続してみた
はじめに
EC2にインストールしたOSSのGrafanaでデータソースにRDSを使いたい場面があったのでやってみました。
GrafanaのプラグインにはAWSサービスと接続するためのプラグインがありますが、RDSと接続する場合はDBの種類に合わせて接続を行う必要があります。
EC2
今回はOSSのGrafanaをインストールする環境として以下のEC2を作成しました。
項目 | 値 |
---|---|
OS | Amazon Linux2023 |
インスタンスタイプ | t3.nano |
注意点として、Grafanaと通信するためにセキュリティグループはTCP3000番ポートのインバウンドルールを許可する必要があります。
また、インストール作業などを行うためにSession ManagerやSSHで接続ができるようにしておきます。
ミドルウェアのインストール
EC2には
- Grafana
- mysqlのクライアントツール
をインストールします。 まずはドキュメントを参考にGrafanaをインストールしていきます。
今回は以下のGrafanaをインストールしました。
項目 | 値 |
---|---|
エディション | Enterprise |
バージョン | 11.0.1 |
sudo dnf install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-11.0.1-1.x86_64.rpm
Grafanaがインストールできたのでサービスを起動します。
sudo systemctl start grafana-server sudo systemctl enable grafana-server.service sudo systemctl status grafana-server
次にRDSの接続用にmysql clientをインストールします。
sudo dnf -y localinstall https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023 sudo dnf -y install mysql-community-client
ミドルウェアのインストールはこれで終わりです。
RDSの作成
今回はMySQLを使用したいので、RDS for MySQLを作成します。
項目 | 値 |
---|---|
エンジンバージョン | 8.0.35 |
インスタンスタイプ | db.t3.micro |
RDSはEC2と接続できるようにセキュリティグループを設定してください。
作成したRDSのエンドポイントと、DB名はGrafanaの接続時に使うので控えておきます。
Grafanaの接続設定
それではGrafanaを設定してRDSと接続していきましょう。 まずはEC2上のGrafananにログインします。
ブラウザでEC2のパブリックIP:3000
にアクセスしてGrafanaに接続します。
初期状態では、IP,PWどちらもadminでログインできます。
ログインするとPW変更が求められるのでPWを変更します。
ログインした後、左メニューより Administration > Plugins and data > Plugins と進みます。
表示されるプラグインの一覧より、MySQLプラグインのinstalledをクリックします。
MySQLの接続設定画面が表示されるため、RDSの情報を入力します。 最低限、以下の設定を行います。
項目 | 値 |
---|---|
Host URL * | RDSのエンドポイント |
Database name | RDSのDB名(DB識別子ではない) |
Username | RDSで設定したUsername |
Password | RDSで設定したPassword |
その他のオプション設定は必要に応じて行ってください。 設定が完了したら「Save & test」をクリックして接続の確認を行います。 接続が成功したら以下のように「Database Connection OK」が表示されます。
この時、接続エラーが起きる場合は
- RDSのエンドポイントやDB名が間違っていないか
- EC2にログインしてRDSへ直接接続可能か
などを確認してみるとよいでしょう。 エンドポイントとDB名は以下のAWS CLIコマンドで確認することもできます。(RDSの識別子は適宜読み替えて下さい)
# エンドポイント確認 aws rds describe-db-instances --db-instance-identifier <RDSの識別子> --query "DBInstances[0].Endpoint.Address" --output text # DB名確認 aws rds describe-db-instances --db-instance-identifier <RDSの識別子> --query "DBInstances[0].DBName" --output text
可視化してみる
それでは準備が整ったのでデータを可視化してみましょう。
ダミーデータの用意
まずはEC2よりMySQLに接続してダミーデータを挿入します。 データベースとテーブルを作成します。
CREATE DATABASE demo_data; USE demo_data;
CREATE TABLE sensor_data ( id INT AUTO_INCREMENT PRIMARY KEY, device_id VARCHAR(50) NOT NULL, temperature DECIMAL(5, 2) NOT NULL, humidity DECIMAL(5, 2) NOT NULL, timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
適当な時系列のダミーデータを入れます。
INSERT INTO sensor_data (device_id, temperature, humidity, timestamp) VALUES ('device_1', 23.5, 45.2, '2023-10-01 00:00:00'), ('device_1', 23.1, 45.3, '2023-10-01 01:00:00'), ('device_1', 22.7, 45.4, '2023-10-01 02:00:00'), ('device_1', 23.8, 45.5, '2023-10-01 03:00:00'), ('device_1', 22.9, 45.6, '2023-10-01 04:00:00');
Grafanaで可視化
Grafanaの画面に戻りGrafanaのダッシュボードを作成します。 左メニューの Dashboards > Create Dashboard をクリックします。
先ほど作成したデータソースのmysqlをクリックします。
画面下側のQueryのCodeでデータを可視化してみます。
Queryの内容に以下のSQLを記載して、Run queryをクリックします。
temperature
の値を時系列で確認することができます。
SELECT timestamp AS time, temperature FROM demo_data.sensor_data ORDER BY timestamp ASC;
先ほどRDSに登録したデータが時系列で可視化されていますね。 これでRDSへの接続、データ可視化まで確認することができました。
まとめ
EC2上のOSSのGrafanaからRDSへ接続する一連の流れをやってみました。 EC2をECSやFargeteなどコンテナ化したり、Multi-AZにして冗長化することもできるようです。
Multi-AZを行う場合は、Grafanaの設定ファイルの共有や、ユーザー管理など、他にもサービスを組み合わせる必要がありそうです。 また機会があればやってみたいと思います。 ただし、Amazon Managed Grafanaで代替できる場合は、運用の面でもメリットが大きいので代替可能か検討してみるといいかもしれません。